/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.qp.smsmarketing.dao;

import com.qp.smsmarketing.dao.abstractdao.AbstractDAO;
import com.qp.smsmarketing.dao.abstractdao.Hib;
import com.qp.smsmarketing.entity.Grupo;
import java.util.List;

/**
 *
 * @author waldenilson
 */
public class GrupoDAO extends AbstractDAO {

    public GrupoDAO() {
        super.entityManager = Hib.getSessionFactory();
    }

    public List buscarTodos() {
        return findAllRows("Grupo");
    }

    public List buscarTodosAtivo() {
        return findAllRowsActive("Grupo");
    }

    public boolean salvarObj(Object o) {
        return salvar(o);
    }

    public boolean atualizarDados(Object o) {
        return atualizar(o);
    }

    public boolean deletarGrupos() {
        entityManager.getTransaction().begin();
        String sqlDelete = "DELETE FROM Grupo";
        if (deletarGrupoContato()) {
            try {
                entityManager.createQuery(sqlDelete).executeUpdate();
                entityManager.getTransaction().commit();
                return true;
            } catch (Exception e) {
                System.out.println(e);
                return false;
            }
        } else {
            return false;
        }
    }

    public boolean deletarGrupoContato() {
        String sql = "DELETE FROM GrupoContato gc";
        try {
            entityManager.createQuery(sql).executeUpdate();
            //entityManager.getTransaction().commit();
            return true;
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }

    public List filtrarGruposPorNome(String nome) {
        String sql = "SELECT g FROM Grupo g WHERE g.nomeGrupo LIKE :nome";
        List<Grupo> l = entityManager.createQuery(sql).setParameter("nome", "%" + nome + "%").getResultList();
        return l;
    }

    /**
     * @param campo - variavel que determina qual campo filtrar
     * @param valor - variavel que determina o valor do campo filtrado
     * @return
     */
    public List filtrarGruposPorContatoNome(String valor) {
        String sql = "SELECT g FROM Grupo g, GrupoContato gc, Contato c WHERE g.idGrupo=gc.grupoGrupoContato AND gc.contatoGrupoContato=c.idContato AND c.nomeContato LIKE :nomeContato";
        List<Grupo> l = entityManager.createQuery(sql).setParameter("nomeContato", "%" + valor + "%").getResultList();
        return l;
    }

    public List filtrarGruposPorContatoCelular(String celular) {
        String sql = "SELECT g FROM Grupo g, GrupoContato gc, Contato c WHERE g.idGrupo=gc.grupoGrupoContato AND gc.contatoGrupoContato=c.idContato AND c.smsContato LIKE :celular";
        List<Grupo> l = entityManager.createQuery(sql).setParameter("celular", "%" + celular + "%").getResultList();
        return l;
    }

    public List filtrarGruposPorContatoAniversario(String aniversario) {
        String sql = "SELECT g FROM Grupo g, GrupoContato gc, Contato c WHERE g.idGrupo=gc.grupoGrupoContato AND gc.contatoGrupoContato=c.idContato AND c.dataaniContato LIKE :aniversario";
        List<Grupo> l = entityManager.createQuery(sql).setParameter("aniversario", "%" + aniversario + "%").getResultList();
        return l;
    }
}
